package main

import "fmt"

type Pay interface {
	PayPage(price int64) string
}
type AliPay struct{}

func (a AliPay) PayPage(price int64) string {
	return "支付宝支付"
}

type WxPay struct{}

func (w WxPay) PayPage(price int64) string {
	return "微信支付"
}

type PayType int8

const (
	AliPayType PayType = 1
	WxPayType  PayType = 2
)

func NewPayPage(payType PayType) Pay {
	switch payType {
	case AliPayType:
		return AliPay{}
	case WxPayType:
		return WxPay{}
	default:
		return nil
	}
}

// 不符合开闭原则  简单易用 适合产品类型不多的
func main() {
	pay := NewPayPage(AliPayType)
	fmt.Println(pay.PayPage(232))
	page := NewPayPage(WxPayType)
	fmt.Println(page.PayPage(232))
}
